spb/llmindex Public
The discriminative, contamination-resistant, fully transparent LLM ranking — updated live.
TypeScript 77.9%
TeX 15.2%
Python 3.7%
SQL 1.4%
JavaScript 1.1%
Shell 0.5%
1/**2 * llmindex.io — GET /api/v1/leaderboard/:domain (per-domain ranking + sub-metrics)3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 * License: Proprietary — © Simon-Pierre Boucher, all rights reserved6 */7import { type NextRequest } from 'next/server';8import { isDomain } from '@llmindex/scoring';9import { getLeaderboard } from '@/lib/data';10import { apiError, apiJson } from '@/lib/api';11import { rateLimit } from '@/lib/rate-limit';1213export const dynamic = 'force-dynamic';1415export async function GET(req: NextRequest, { params }: { params: { domain: string } }) {16 const limited = await rateLimit(req);17 if (limited) return limited;18 if (!isDomain(params.domain)) return apiError(404, 'unknown_domain');19 const search = req.nextUrl.searchParams;20 const limit = Math.min(200, Math.max(1, Number(search.get('limit') ?? 50)));21 const offset = Math.max(0, Number(search.get('offset') ?? 0));22 const data = await getLeaderboard(params.domain, limit, offset);23 if (!data) return apiError(503, 'no_score_run_available');24 return apiJson(25 {26 index_version: data.run.indexVersion,27 domain: params.domain,28 run: {29 id: data.run.id,30 kind: data.run.kind,31 status: data.run.status,32 created_at: data.run.createdAt,33 notes: data.run.notes,34 },35 pagination: { limit, offset, count: data.entries.length },36 entries: data.entries.map((e) => ({37 rank: e.rank,38 model: e.slug,39 name: e.name,40 provider: e.provider,41 score: e.score,42 score_low: e.scoreLow,43 score_high: e.scoreHigh,44 sub_metrics: e.subMetrics,45 })),46 },47 { cacheSeconds: 3600 },48 );49}50